# -*- coding:utf-8 -*-

# @Time    : 2023/6/5 11:03
# @Author  : zengwenjia
# @Email   : zengwenjia@lingxi.ai
# @Software: LLM_internal

# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
import sys
sys.path.append('../../../')

from bot.financial_wechat.agent.base_agent import LLMAgent
import asyncio

default_template_v1 = """
作为一个专业的、非常懂营销的信贷领域的{role}，你正通过电话和用户沟通，你需要根据当前的对话记录用简洁的一句短语总结用户的当前想要解决的问题或疑议。

需要注意以下要求：
1.如果用户表达是一句完整的话，不需要联系上文的销售员说的话，如果不是完整的，需要联系上文销售员说的话。
2.用户问题包括：非本人、询问什么平台，加企业微信好友的目的、如何查看服务通知、如何添加到通讯录，不满投诉、投诉倾向、别给我打电话了，怎么有我的号码，询问工号，静音未回复，打电话目的，不愿意添加微信，拒绝加微,微信不是当前手机号，没收到服务通知，怎么找服务通知,怎么操作添加好友，通话中没有网络，为什么要操作，咨询其他产品，操作麻烦，有人联系过，是否有销售任务，挂机后自己操作，别在这个时间给我打电话，咨询活动详情，不想加陌生人，不用微信，不愿意加微，打电话有什么目的，服务是否收费，工作原因不方便加，公司在哪，和其他服务通道区别，很少使用该产品，怀疑平台，怀疑信息泄露，会考虑，加微信好处，没听懂，没听懂活动，没听清，没有企业微信，没找到服务通知，你怎么有我号码，人还是机器人，稍后操作，特殊不幸情况，添加好友操作麻烦，同意挂机后操作，晚点再联系，微信号不是手机号，询问公司地址，询问加微信的好处，要求发短信，要求反馈立刻处理，要求挂机，要求加微信，自己会操作，要求等一下，已经在操作，已经加过微信，已添加好友，语音信箱，怎么联系客服，转人工，表示在开车或开会，多次表示在开车或开会等等；
3.如果用户当前没有问题，则输出"无"，不要无中生有。
4.用户表示已经添加到通讯录，表示已添加好友。
5.用户询问在微信哪里，表示怎么找服务通知。
6.用户表达等一下，表示要求等一下。
7.用户表示没有看到服务通知，没有收到企业微信推送、没看到二维码等，用户问题是没收到服务通知。
8.用户表示我看一下，等我看看等，表示已经在操作
10.用户表示是智能助手，语音助手，电话助理，请录音，录音超时等时，用户其实并非真人而是AI回复，这时用户问题是语音信箱。
11.用户表示稍后查看，之后操作，之后会考虑，有需要再说等，用户问题是会考虑。用户肯定回应算是用户无问题。
12.用户表示会操作添加好友，知道操作流程，用户问题是自己会操作。
13.用户表示在忙，上班等没有时间进行沟通时，用户问题是在忙。
14.用户未明白销售员的表述含义，或者希望销售员简明点表述，用户问题是没听懂。
15.用户想打断销售员、用户要求销售员暂停，用户问题是打断。
16.用户询问怎么去操作，去哪操作，怎么去查看，去哪查看，需要根据用户是针对服务通知还是扫码加好友判断用户问题是怎么找服务通知，还是怎么操作添加好友。
18.用户表述不需要，不用等拒绝含义，用户问题是不需要。用户可能会用需要再联系、以后再加好友等来表示自己不需要，这时应返回"不需要-拒绝加好友"。用户一句话中超过3次表述不需要，不用，用户问题是强烈拒绝。
19.用户一句话中或上下文中超过3次表述不需要，不用，用户问题是强烈拒绝。
20.用户一句话中或上下文中表述在忙、会考虑、稍后再说、不需要、拒绝等相同意思的词，如果超过三次，需要加上"多次表示"的前缀，如多次表示在忙、多次表示会考虑、多次表示稍后再说等。
21.用户询问什么服务、活动、优惠，加企微好友的作用是什么，用户问题是：加微目的。
22.用户询问如何去查看服务通知，用户问题是如何查看服务通知。用户询问如何添加好友，用户问题是如何添加到通讯录。
24.用户只有明确否定是本人，用户问题才是非本人。在核身阶段单纯的"你说"等，应是无问题，询问"你哪位"等是"询问什么平台"。
25.用户询问我们是不是机器人，用户问题是询问人还是机器人。
26.用户在上下文中表述自己正在开车/开会的，则用户问题是表示在开车/开会。
===
{conversation_history}
===
结合对话记录和注意要求，用一句短语简洁总结用户当前的问题（如果有多个只返回最需要解决的一个），用户问题是：
"""


class QuestioningDisputeResolution(LLMAgent):
    """用户问题及疑议-agent"""

    def __init__(self, role, conversation_history):
        self.prompt = default_template_v1.format(role=role, conversation_history=conversation_history)
        super().__init__(self.prompt)

async def extract_user_info(session_id, conversation_history):
    questioning_dispute_resolution = QuestioningDisputeResolution('销售员',
                                                                  conversation_history)
    user_question = await questioning_dispute_resolution.achat_auto_llm(type='gpt')
    print(f"session_id:{session_id},整理后的用户问题是:{user_question}")


if __name__ == '__main__':
    conversation_history_str = '''
销售员:喂您好，请问您是孙女士吗？
用户:嗯，哪位。
销售员:欸~您好，您先别挂哈，来电不是让您办业务的，是京东金融安排我成为您日后的专属客户经理，之后任何提额降息、借款免息活动我就能第一时间通知您，或者您使用产品遇到问题也可以直接咨询我，我现在通过官方企业微信添加您，麻烦您通过一下可以吗？
用户:微信吗？ 没有。
'''
    asyncio.run(extract_user_info('123', conversation_history_str))




